﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WPFSchematics.Definition.Entities;
using System.Windows;
using WPFSchematics.Definition.Common;
using WPFSchematics.Definition.Entities.Collection;
using WPFSchematics.Definition.Models;

namespace WPFSchematics.Definition.Shapes
{
    /// <summary>
    /// 图元集合接口。
    /// </summary>
    public interface IFeatureSet
    {
        /// <summary>
        /// 图元集最小外接矩形。
        /// </summary>
        Rect Bounds { get; }
        /// <summary>
        /// 
        /// </summary>
        IShapeController ShapeController { get; set; }
        /// <summary>
        /// 
        /// </summary>
        bool ShapeControlEnable { set; get; }
        /// <summary>
        /// 图元设备集合。
        /// </summary>
        FeatureCollection ShapeFeatures { get; }
        /// <summary>
        /// 图元节点集合。
        /// </summary>
        List<IShapeLayoutNode> ShapeNodes { get; }
        /// <summary>
        /// 图元边集合。
        /// </summary>
        List<IShapeLayoutEdge> ShapeEdges { get; }
        /// <summary>
        /// 图元选择集合。
        /// </summary>
        List<IShapeProvider> Selection { get; }
        /// <summary>
        /// 
        /// </summary>
        FeatureCollection FeatureSelection { get; }
        /// <summary>
        /// 图元视图集合。
        /// </summary>
        ViewCollection ShapeViews { get; }
        
        /// <summary>
        /// 清空图元集合。
        /// </summary>
        void Clear();

        /// <summary>
        /// 
        /// </summary>
        void Copy();

        /// <summary>
        /// 
        /// </summary>
        void Cut();

        /// <summary>
        /// 
        /// </summary>
        void Paste();

        /// <summary>
        /// 
        /// </summary>
        void Delete();

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        List<IShapeFeature> CreateTemplate();

        /// <summary>
        /// 
        /// </summary>
        event SelectionChangedActionEventHandler SelectionChangedAction;
    }
}
